package com.weplay.gameplane;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.weplay.gameplane.utils.DateTimeUtils;
import com.weplay.gameplane.utils.HolidayUtil;
import com.weplay.gameplane.utils.IDCardValidate;
import com.weplay.gameplane.utils.SPUtils;
import com.weplay.gameplane.utils.TToast;
import com.weplay.gameplane.widget.AlertDialog;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AuthenticationActivity extends Activity {


    private EditText etName;
    private EditText etNumber;
    private Button btnSure;
    private ProgressBar loadView;
    private ImageView ivBack;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_authentication);
        initView();
        setListtener();

    }

    private void initView() {
        etName = (EditText) findViewById(R.id.et_name);
        etNumber = (EditText) findViewById(R.id.et_number);
        btnSure = (Button) findViewById(R.id.btn_sure);
        loadView = (ProgressBar) findViewById(R.id.load_view);
        ivBack = (ImageView) findViewById(R.id.iv_back);
    }

    private void setListtener() {
        ivBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AuthenticationActivity.this.finish();
            }
        });
        btnSure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = etName.getText().toString();
                String number = etNumber.getText().toString();

                if (stringFilterChinese(name)) {
                    TToast.show(AuthenticationActivity.this, "请输入汉字");
                    return;
                }
                if (TextUtils.isEmpty(number) || number.length() < 18) {
                    TToast.show(AuthenticationActivity.this, "请输入18位身份证号");
                    return;
                }
                //返回值为boolean，true代表验证通过
                if (!IDCardValidate.validate_effective(number)){
                    TToast.show(AuthenticationActivity.this, "您输入的身份证号不正确");
                    return;
                }

                int age =  IDCardValidate.countAge(number);
                SPUtils.getInstance(AuthenticationActivity.this).putInt("userAge", age);
                if (age < 18){
                    // 处理节假日
                    SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");
                    String httpArg = f.format(new Date());
                    loadView.setVisibility(View.VISIBLE);
                    HolidayUtil.request(httpArg, new HolidayUtil.NetWorkCallback() {
                        @Override
                        public void onCallback(String jsonResult) {
                            //主线程中更新UI
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    //TODO 在主线程中更新UI的操作
                                    // 0 上班 1周末 2节假日
                                    loadView.setVisibility(View.GONE);
                                    if ("0".equals(jsonResult)) {
                                        if (DateTimeUtils.dateChangeToWeek(DateTimeUtils.getCurrentDate(DateTimeUtils.DEF_DATE_FORMAT_1)) == 5){
                                            //今天是 周五
                                            if (DateTimeUtils.getCurrentHour() == 20 ){
                                                showHintDialog(true,"你当前为未成年账号，已被纳入防沉迷系统。根据国家新闻出版署《关于防止未成年人沉迷网络游戏的通知》，《关于进一步严格管理 切实防止未成年人沉迷网络游戏的通知》，网络游戏仅可在周五、周六、周日和法定节假日每日20时至21时向未成年人提供60分钟网络游戏服务。当前时间段可以游玩，请合理安排时间。");
                                            }else{
                                                showHintDialog(false,"你当前为未成年账号，已被纳入防沉迷系统。根据国家新闻出版署《关于防止未成年人沉迷网络游戏的通知》，《关于进一步严格管理 切实防止未成年人沉迷网络游戏的通知》，网络游戏仅可在周五、周六、周日和法定节假日每日20时至21时向未成年人提供60分钟网络游戏服务。当前时间段无法游玩，请合理安排时间。");
                                            }
                                        }else {
                                            showHintDialog(false,"你当前为未成年账号，已被纳入防沉迷系统。根据国家新闻出版署《关于防止未成年人沉迷网络游戏的通知》，《关于进一步严格管理 切实防止未成年人沉迷网络游戏的通知》，网络游戏仅可在周五、周六、周日和法定节假日每日20时至21时向未成年人提供60分钟网络游戏服务。当前时间段无法游玩，请合理安排时间。");
                                        }
                                    }else if ("1".equals(jsonResult) || "2".equals(jsonResult)) {
                                        //周末和节假日
                                        if (DateTimeUtils.getCurrentHour() == 20 ){
                                            showHintDialog(true,"你当前为未成年账号，已被纳入防沉迷系统。根据国家新闻出版署《关于防止未成年人沉迷网络游戏的通知》，《关于进一步严格管理 切实防止未成年人沉迷网络游戏的通知》，网络游戏仅可在周五、周六、周日和法定节假日每日20时至21时向未成年人提供60分钟网络游戏服务。当前时间段可以游玩，请合理安排时间。");
                                        }else{
                                            showHintDialog(false, "你当前为未成年账号，已被纳入防沉迷系统。根据国家新闻出版署《关于防止未成年人沉迷网络游戏的通知》，《关于进一步严格管理 切实防止未成年人沉迷网络游戏的通知》，网络游戏仅可在周五、周六、周日和法定节假日每日20时至21时向未成年人提供60分钟网络游戏服务。当前时间段无法游玩，请合理安排时间。");
                                        }
                                    }

                                }
                            });
                        }
                    });

                }else {
                    loadView.setVisibility(View.VISIBLE);
                    v.postDelayed(new Runnable() {
                        @Override
                        public void run() {
//                        TToast.show(AuthenticationActivity.this, "认证成功");
                            loadView.setVisibility(View.GONE);
                            SPUtils.getInstance(AuthenticationActivity.this)
                                    .putInt("isAuthentication", 200);
                            startGame();

                            AuthenticationActivity.this.finish();
                        }
                    }, 1000);
                }

            }
        });
    }

    /**
     * 限制只能输入汉字，过滤非汉字
     *
     * @param str 输入值
     * @return true 非汉字；false 汉字
     */

    public boolean stringFilterChinese(CharSequence str) {
        //只允许汉字，正则表达式匹配出所有非汉字
        String regEx = "[^\u4E00-\u9FA5]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        if (m.find()) {
            return true;
        } else {
            return false;
        }
    }

    private void startGame() {
        Intent intent = new Intent(this, GameActivity.class);
        startActivity(intent);
    }


    public void showHintDialog(boolean canGame, String hintMsg) {
        new AlertDialog(AuthenticationActivity.this).setTitle("提示")
                .setMessage(hintMsg)
                .setOk("确定", new AlertDialog.OnButtonClickListener() {
                    @Override
                    public void onClick() {
                        loadView.setVisibility(View.GONE);
                        if (canGame) {
                            loadView.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    SPUtils.getInstance(AuthenticationActivity.this)
                                            .putInt("isAuthentication", 200);
                                    startGame();

                                    AuthenticationActivity.this.finish();
                                }
                            }, 1000);
                        }
                    }
                })
                .show();
    }


}
